#pragma once
namespace graph_virtual
{
struct all_way_view_t:virtual_graph_view
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        return true;
    }
    all_way_view_t(VirtualGraph::shared_ptr graph_ptr):virtual_graph_view(graph_ptr)
    {
        
    }
};


struct MotorWayView:virtual_graph_view
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        if (e.highway_ >=1 && e.highway_ <= 9)
            return true;
        else
            return false;
    }
    MotorWayView(VirtualGraph::shared_ptr graph_ptr):virtual_graph_view(graph_ptr)
    {
        
    }
};
struct BicycleWayView:virtual_graph_view
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        if ( (e.highway_ >=2 && e.highway_ <= 9) ||
             (e.highway_ == 11)||
             (e.highway_ == 13)
           )
            return true;
        else
            return false;
}
    BicycleWayView(VirtualGraph::shared_ptr graph_ptr):virtual_graph_view(graph_ptr)
    {
        
    }
};


struct FootWayView:virtual_graph_view
{
public:
    virtual bool CallVertexPredicate(Vertex::ref v)
    {
        return true;
    }
    virtual bool CallEdgePredicate(Edge::ref e)
    {
        if ( (e.highway_ >=2 && e.highway_ <= 11) ||
             (e.highway_ == 14)
           )
             return true;
        else
             return false;
    }
    FootWayView(VirtualGraph::shared_ptr graph_ptr):virtual_graph_view(graph_ptr)
    {
        
    }
};
}